package cn.tedu.spring6.text;

import cn.tedu.spring6.bean.Student;
import cn.tedu.spring6.bean.User;
import org.junit.Test;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
 * Spring容器只对singleton(单例的)的Bean进行完整的生命周期管理。
 * 如果是prototype作用域的Bean，Spring容器只负责将该Bean初始化完毕。等客户端程序一旦获取到该Bean之后，Spring容器就不再管理该对象的生命周期了。
 */
public class BeanLifecycleFive {

   @Test
   public void testRegisterBean(){
//自己new的对象
       Student student = new Student();
       System.out.println(student);
//将自己写的容器纳入spring容器来管理，半路上交给Spring来管理
       DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
       factory.registerSingleton("studentBean",  student);

//从spring容器来管理
       Object studentBean = factory.getBean("studentBean");
       System.out.println(studentBean);
   }
    @Test
    public void TestBeanLifecycleFive() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
        User user = applicationContext.getBean("user", User.class);
        System.out.println("第六步：使用Bean对象：" + user);

        // 销毁Bean  （注意：必须手动关闭Spring容器，这样Spring容器才会销毁Bean.）
        ClassPathXmlApplicationContext context = (ClassPathXmlApplicationContext) applicationContext;
        context.close();
    }
}
